// app.js
App({
  globalData: {
    userInfo: null,
    openid: '',
    userId: '',
    // 云开发环境ID
    cloudEnvId: 'community-5g8oogzj2697eda7',
    // 页面刷新标记（发布/编辑后需要刷新的页面）
    needRefreshPages: {
      index: false,      // 首页
      market: false,     // 二手市场
      lostFound: false,  // 失物招领
      myPublish: false   // 我的发布
    }
  },
  
  onLaunch() {
    console.log('小程序启动')
    
    // 初始化云开发
    this.initCloud()
    
    // 检查用户登录状态
    this.checkLogin()
  },
  
  /**
   * 初始化云开发
   */
  initCloud() {
    if (!wx.cloud) {
      console.error('请使用 2.2.3 或以上的基础库以使用云能力')
      wx.showModal({
        title: '提示',
        content: '当前微信版本过低，无法使用云开发功能，请升级到最新版本',
        showCancel: false
      })
      return
    }
    
    wx.cloud.init({
      env: this.globalData.cloudEnvId,
      traceUser: true
    })
    
    console.log('云开发初始化成功')
  },
  
  /**
   * 检查用户登录状态
   */
  checkLogin() {
    // 从本地缓存获取用户信息
    const userInfo = wx.getStorageSync('userInfo')
    const openid = wx.getStorageSync('openid')
    const userId = wx.getStorageSync('userId')
    
    if (userInfo && openid && userId) {
      this.globalData.userInfo = userInfo
      this.globalData.openid = openid
      this.globalData.userId = userId
      console.log('用户已登录', userInfo)
    } else {
      console.log('用户未登录')
    }
  },
  
  /**
   * 用户登录
   * @param {Object} userInfo 用户信息 {nickName, avatarUrl}
   */
  async userLogin(userInfo = {}) {
    try {
      wx.showLoading({
        title: '登录中...',
        mask: true
      })
      
      const res = await wx.cloud.callFunction({
        name: 'login',
        data: {
          action: 'login',
          nickName: userInfo.nickName || '微信用户',
          avatarUrl: userInfo.avatarUrl || ''
        }
      })
      
      wx.hideLoading()
      
      if (res.result.code === 0) {
        // 登录成功，保存用户信息
        this.globalData.openid = res.result.data.openid
        this.globalData.userId = res.result.data.userId
        this.globalData.userInfo = userInfo
        
        // 保存到本地缓存
        wx.setStorageSync('openid', res.result.data.openid)
        wx.setStorageSync('userId', res.result.data.userId)
        wx.setStorageSync('userInfo', userInfo)
        
        console.log('登录成功', res.result.data)
        return true
      } else {
        wx.showToast({
          title: res.result.msg || '登录失败',
          icon: 'none'
        })
        return false
      }
    } catch (err) {
      wx.hideLoading()
      console.error('登录失败', err)
      wx.showToast({
        title: '登录失败，请重试',
        icon: 'none'
      })
      return false
    }
  },
  
  /**
   * 退出登录
   */
  logout() {
    this.globalData.userInfo = null
    this.globalData.openid = ''
    this.globalData.userId = ''
    
    wx.removeStorageSync('userInfo')
    wx.removeStorageSync('openid')
    wx.removeStorageSync('userId')
    
    console.log('已退出登录')
  },
  
  /**
   * 检查是否已登录
   */
  isLoggedIn() {
    return !!(this.globalData.openid && this.globalData.userId)
  },

  /**
   * 设置页面需要刷新
   * @param {String|Array} pages 页面名称或页面数组 'index' | ['index', 'market']
   */
  setPageNeedRefresh(pages) {
    const pageArray = Array.isArray(pages) ? pages : [pages]
    pageArray.forEach(page => {
      if (this.globalData.needRefreshPages.hasOwnProperty(page)) {
        this.globalData.needRefreshPages[page] = true
        console.log(`[刷新标记] 设置 ${page} 需要刷新`)
      }
    })
  },

  /**
   * 检查并重置页面刷新标记
   * @param {String} page 页面名称
   * @returns {Boolean} 是否需要刷新
   */
  checkAndResetRefresh(page) {
    const needRefresh = this.globalData.needRefreshPages[page] || false
    if (needRefresh) {
      this.globalData.needRefreshPages[page] = false
      console.log(`[刷新标记] ${page} 需要刷新，标记已重置`)
    }
    return needRefresh
  },

  /**
   * 发布商品后调用（设置需要刷新的页面）
   */
  onGoodsPublished() {
    this.setPageNeedRefresh(['index', 'market', 'myPublish'])
  },

  /**
   * 发布失物后调用
   */
  onLostPublished() {
    this.setPageNeedRefresh(['index', 'lostFound', 'myPublish'])
  },

  /**
   * 编辑商品后调用
   */
  onGoodsUpdated() {
    this.setPageNeedRefresh(['index', 'market', 'myPublish'])
  },

  /**
   * 编辑失物后调用
   */
  onLostUpdated() {
    this.setPageNeedRefresh(['index', 'lostFound', 'myPublish'])
  }
})
